package com.ciwong.epaper.modules.otherlogin.utils;

import com.ciwong.libs.utils.CWSys;
import com.ciwong.epaper.modules.otherlogin.bean.QQLoginParam;
import com.ciwong.epaper.modules.otherlogin.bean.WeiXinLoginParam;

import java.io.IOException;
import java.io.Serializable;

/**
 * 登录授权相配置文件 Created by res-dlzhou on 2015/8/26.
 */
public class LoginParamSharedUtil
{

    /**
     * 授权成功后得到的Code码,用于获取TOKENT信息
     */
    public static final String TAG_WEIXIN_LOGIN_CODE = "weixin_login_code";

    /**
     * QQ授权成功后得到的参数，用于登录流程通过后，过一段时间无须重新授权
     */
    public static final String TAG_QQ_LOGIN_PARAM = "qq_login_param";

    /** 单例 **/
    private static volatile LoginParamSharedUtil sharedUtil;

    private LoginParamSharedUtil()
    {

    }

    /**
     * 获取单例
     * 
     * @return BookcaseSharedUtil
     */
    public static LoginParamSharedUtil getInstance()
    {
        synchronized (LoginParamSharedUtil.class)
        {
            if (sharedUtil == null)
            {
                sharedUtil = new LoginParamSharedUtil();
            }
        }
        return sharedUtil;
    }

    /**
     * 保存微信授权参数
     * 
     * @param param
     */
    public void setWeiXinLoginParam(WeiXinLoginParam param)
    {
        try
        {
            CWSys.setSharedSerializable(TAG_WEIXIN_LOGIN_CODE,
                    (Serializable) param);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }

    /**
     * 获取微信授权参数
     * 
     * @return
     */
    public WeiXinLoginParam getWeiXinLoginParam()
    {
        try
        {
            return (WeiXinLoginParam) CWSys
                    .getSharedSerializable(TAG_WEIXIN_LOGIN_CODE);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 保存QQ授权参数
     * 
     * @param param
     */
    public void setQQLoginParam(QQLoginParam param)
    {
        try
        {
            // 设置登录有效期
            String expires = String.valueOf((System.currentTimeMillis()
                    + Long.parseLong(param.getExpires_in()) * 1000));
            param.setExpires_in(expires);
            CWSys.setSharedSerializable(TAG_QQ_LOGIN_PARAM,
                    (Serializable) param);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }

    /**
     * 获取QQ登录参数
     * 
     * @return
     */
    public QQLoginParam getQQLoginParam()
    {
        try
        {
            return (QQLoginParam) CWSys
                    .getSharedSerializable(TAG_QQ_LOGIN_PARAM);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 登录是否已经过了有效期(过了有效期须重新走登录流程)
     * 
     * @return true已经过了有效期
     */
    public boolean isQQLoginExpires()
    {
        QQLoginParam param = getQQLoginParam();
        if (param != null && Long.parseLong(param.getExpires_in())
                - System.currentTimeMillis() > 0)
        {
            return false;
        }
        return true;
    }
}
